﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entities;
using System.Data.SqlClient;
using System.Data;
namespace AccesoDatos
{
    public class ItinerariosRepartos
    {
        public static void InsertarItinerario(Itinerario_Reparto ir, List<Detalle_Itinerario> lstDetalleItinerario, out int sFilasAfectadas)
        {
            sFilasAfectadas = 0;
            int cantInsertItinerario = 0;
            int cantInsertDetallesIR= 0;
            int filasUpdate = 0;
            if (lstDetalleItinerario.Count > 0)
            {
                //alta
                SqlConnection conexion = DB.Conectar();
                SqlTransaction trans = null;
                try
                {
                    trans = conexion.BeginTransaction();
                    string cmdItinerario = "INSERT INTO Itinerario_Reparto (nroCamionReparto, fecha) VALUES (@nroCamion,@fecha)";
                    List<SqlParameter> listaParam = new List<SqlParameter>();
                    listaParam.Add(new SqlParameter("@nroCamion", ir.NroCamionReparto));
                    listaParam.Add(new SqlParameter("@fecha", ir.Fecha));
                    cantInsertItinerario = DB.EjecutarCommand(cmdItinerario, listaParam, conexion, trans);
                    string cmdIDItinerario = "Select @@identity FROM Itinerario_Reparto";
                    listaParam = new List<SqlParameter>();
                    int idItinerario = int.Parse(DB.EjecutarScalar(cmdIDItinerario, listaParam, conexion, trans));
                    //cargar detalles
                    if (cantInsertItinerario > 0)
                    {
                        foreach (Detalle_Itinerario itemDIR in lstDetalleItinerario)
                        {
                            string comando = "INSERT INTO Detalle_Itinerario (idItinerario, fechaHoraEntrega, entregado, observaciones, idFactura) VALUES (@idItinerario,@fecha,@entregado,@observaciones,@idFactura)";
                            List<SqlParameter> lstParametros = new List<SqlParameter>();
                            lstParametros.Add(new SqlParameter("@idItinerario", idItinerario));
                            lstParametros.Add(new SqlParameter("@fecha", itemDIR.FechaHoraEntrega));
                            lstParametros.Add(new SqlParameter("@entregado", itemDIR.Entregado));
                            lstParametros.Add(new SqlParameter("@observaciones", itemDIR.Observaciones));
                            lstParametros.Add(new SqlParameter("@idFactura", itemDIR.IdFactura));
                            cantInsertDetallesIR = DB.EjecutarCommand(comando, lstParametros, conexion, trans);
                        }

                        if (cantInsertDetallesIR > 0)
                        {
                            int estado = 0;
                            foreach (Detalle_Itinerario item in lstDetalleItinerario)
                            {
                                string comando = "UPDATE Factura SET idEstadoFactura = @idEstado WHERE (idFactura = @id)";
                                List<SqlParameter> lstParametros = new List<SqlParameter>();
                                if (item.Entregado && !string.IsNullOrEmpty(item.Observaciones))
                                    estado=3;
                                else if(item.Entregado)     
                                {
                                    estado=2;
                                }
                                else
                                {
                                    estado=4;
                                }

                                lstParametros.Add(new SqlParameter("@idEstado", estado));
                                lstParametros.Add(new SqlParameter("@id", item.IdFactura));
                                filasUpdate = DB.EjecutarCommand(comando, lstParametros, conexion, trans);
                            }
                            if (filasUpdate > 0)
                            {
                                sFilasAfectadas = filasUpdate;
                                trans.Commit();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    if (trans != null)
                        trans.Rollback();
                    throw new Exception("No se pudo registrar el itinerario " + ex.Message);
                }
                finally
                {
                    if (conexion != null && conexion.State == ConnectionState.Open)
                        conexion.Close();
                }
            }
        }
    }
}
